Python爬虫類プログラミング実践task 4

14551 ワード

  • ajaxロード
  • について
  • chromeの開発者ツールを通じて、ネットワーク要求を監視し、
  • を分析する.
  • seleniumで爬虫類
  • を完成
  • の具体的な流れは以下の通りである:seleniumで登るhttps://news.qq.com/のホットスポット精選[外鎖画像の転送に失敗し、ソースステーションに盗難防止チェーンメカニズムがある可能性があるので、画像を保存して直接アップロードすることをお勧めします(img-JOJmgly 3-1587999004128)(attachment:1585810800%281%29.png)]ホットスポット精選は少なくとも50個登って、csvの各行に以下の番号(1から)、タイトル、リンク、[外链图片转存失败,原站有防盗链メカニズム,推荐保存下直接上传(img-rCe 7 BiBy-15879999004134)(attachment:1585810759%281%29.png)]
  • import time
    from  selenium import webdriver
    driver=webdriver.Chrome(executable_path="D:\chromedriver\chromedriver.exe")
    driver.get("https://news.qq.com")
    #  ajax  
    for i in range(1,100):
        time.sleep(2)
        driver.execute_script("window.scrollTo(window.scrollX, %d);"%(i*200))
    
    from bs4 import BeautifulSoup
    html=driver.page_source
    bsObj=BeautifulSoup(html,"lxml")
    
    jxtits=bsObj.find_all("div",{
         "class":"jx-tit"})[0].find_next_sibling().find_all("li")
    
    print("index",",","title",",","url")
    for i,jxtit in enumerate(jxtits):
    #     print(jxtit)
        
        try:
            text=jxtit.find_all("img")[0]["alt"]
        except:
            text=jxtit.find_all("div",{
         "class":"lazyload-placeholder"})[0].text
        try:
            url=jxtit.find_all("a")[0]["href"]
        except:
            print(jxtit)
        print(i+1,",",text,",",url) 
    
    

    階段を上って食事をする-爬虫類を知る
    リンクは次のとおりです.https://www.zhihu.com/search?q=Datawhale&utm_content=search_history&type=contentrequestsライブラリで実装され、seleniumのWebページで自動化されたヒントは使用できません.このリンクにはログインが必要です.githubなどを通じて、ログインに関するコード実装を検索し、その論理を理解することができます.このタスクでは、上のajaxロードと類似したコピー・貼り付けコードを許可します.今回のajaxロードはrequestsで取得を完了し、最終的にはスタイルを勝手に保存する必要があります.しかしChromeの開発者ツールによりajaxの流れを分析するには[外鎖画像の転送に失敗し、ソース局に盗難防止チェーンメカニズムがある可能性があり、画像を保存して直接アップロードすることを提案する(img-zI 0 u 7 QfN-1587999225142)(attachment:1585811566%281%29.png)]
    import requests
    from http import cookiejar
    Session=requests.session()
    Session.cookies = cookiejar.LWPCookieJar(filename='./cookies.txt')
    Session.cookies.load(ignore_discard=True)
    Session.headers={
         
                'Host': 'www.zhihu.com',
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                              '(KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
            }
    r=Session.get("https://www.zhihu.com/search?q=Datawhale&utm_content=search_history&type=content")
    r.encoding="utf-8"
    
    from bs4 import BeautifulSoup
    import re
    compiler=re.compile('"next":"(https:\\\\u002F\\\\u002Fapi.zhihu.com\\\\u002Fsearch_v3.*?)"')
    r.text
    
    bsObj=BeautifulSoup(r.text,"lxml")
    url=compiler.findall(r.text)[0]
    
    from urllib.parse import unquote
    url=unquote(url,encoding="utf-8", errors='replace')
    url=url.replace("\\u002F","/")
    search_hash_id=re.search("search_hash_id=(.*?)&show_all_topics",url).group(1)
    search_hash_id
    
    offset=20
    lc_idx=21
    for i in range(5):
        r=Session.get("https://www.zhihu.com/api/v4/search_v3?t=general&q=Datawhale&correction=1&offset={offset}&limit=20&lc_idx={lc_idx}&show_all_topics=0&search_hash_id={search_hash_id}&vertical_info=0%2C0%2C1%2C0%2C0%2C0%2C0%2C0%2C0%2C0".format(**{
         "offset":offset+i*20,"lc_idx":lc_idx+i*20,"search_hash_id":search_hash_id}))
        r.encoding="utf-8"
        print(r.json())
        print("
    "
    *20)