2016-04-10 8 views
1

Web tarayıcısı yazmak için python kullanmaya çalışıyorum. re ve istekleri modülünü kullanıyorum. İlk sayfadan URL'ler almak istiyorum (bu bir forum) ve her URL'den bilgi almak istiyorum.Web tarayıcımı kullanarak URL'lerden Python ile doğru kaynak kodu nasıl alınır?

Sorunum şu anda URL'leri bir Listede saklıyorum. Ancak, bu URL'lerin DOĞRU kaynak kodunu almak için daha fazla alamıyorum. Bunu kodunuzu hata olacaktır bunları kullandıktan sonra Fonksiyonlarınızı tanımlamak

import re 
import requests 

url = 'http://bbs.skykiwi.com/forum.php?mod=forumdisplay&fid=55&typeid=470&sortid=231&filter=typeid&pageNum=1&page=1' 

sourceCode = getsourse(url) # source code of the url page 
allLinksinPage = getallLinksinPage(sourceCode) #a List of the urls in current page 
for eachLink in allLinksinPage: 
    url = 'http://bbs.skykiwi.com/' + eachLink.encode('utf-8') 
    html = getsourse(url) #THIS IS WHERE I CAN'T GET THE RIGHT SOURCE CODE 


#To get the source code of current url 
def getsourse(url): 
    header = {'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/8.0; Touch)'} 
    html = requests.get(url, headers=header) 
    return html.text 

#To get all the links in current page 
def getallLinksinPage(sourceCode): 
    bigClasses = re.findall('<th class="new">(.*?)</th>', sourceCode, re.S) 
    allLinks = [] 
    for each in bigClasses: 
     everylink = re.findall('</em><a href="(.*?)" onclick', each, re.S)[0] 
     allLinks.append(everylink) 
return allLinks 
+0

URL'lerin SAĞ kaynak koduyla ne demek istiyorsunuz - sorununuzu açıklayabilir ve herhangi bir hata ekleyebilir misiniz? –

cevap

2

:

İşte benim kodudur. Ayrıca, html'yi ayrıştırmak için de kullanmamalısınız, aşağıdaki gibi beautifulsoup gibi bir ayrıştırıcı kullanın. Ayrıca bağlantıları, ne gerçekten istediğiniz HREF'ler çapa içinde olan taban url katılmak için urlparse.urljoin kullanmak id threadlist ile div içindeki etiketler:

import requests 
from bs4 import BeautifulSoup 
from urlparse import urljoin 

url = 'http://bbs.skykiwi.com/forum.php?mod=forumdisplay&fid=55&typeid=470&sortid=231&filter=typeid&pageNum=1&page=1' 



def getsourse(url): 
    header = {'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 10.0; WOW64; Trident/8.0; Touch)'} 
    html = requests.get(url, headers=header) 
    return html.content 

#To get all the links in current page 
def getallLinksinPage(sourceCode): 
    soup = BeautifulSoup(sourceCode) 
    return [a["href"] for a in soup.select("#threadlist a.xst")] 



sourceCode = getsourse(url) # source code of the url page 
allLinksinPage = getallLinksinPage(sourceCode) #a List of the urls in current page 
for eachLink in allLinksinPage: 
    url = 'http://bbs.skykiwi.com/' 
    html = getsourse(urljoin(url, eachLink)) 
    print(html) 

Eğer urljoin(url, eachLink) yazdırırsanız

http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3177846&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3197510&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3201399&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3170748&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3152747&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3168498&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3176639&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3203657&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3190138&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3140191&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3199154&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3156814&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3203435&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3089967&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3199384&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3173489&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 
http://bbs.skykiwi.com/forum.php?mod=viewthread&tid=3204107&extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 

Eğer v ise: döngü içinde size masa ve döndürülen doğru kaynak kodu için tüm doğru bağlantı verildiğini görmek, aşağıda dönen bağlantıların snippet'idir tarayıcınızda yukarıdaki bağlantıları Isit bunu göreceksiniz sizin sonuçlarından http://bbs.skykiwi.com/forum.php?mod=viewthread&amp;tid=3187289&amp;extra=page%3D1%26filter%3Dtypeid%26typeid%3D470%26sortid%3D231%26typeid%3D470%26sortid%3D231 kullanarak, doğru sayfa olsun göreceksiniz:

Sorry, specified thread does not exist or has been deleted or is being reviewed 
[New Zealand day-dimensional network Community Home] 

açıkça url içinde farkı görebilirsiniz.

everylink = re.findall('</em><a href="(.*?)" onclick', each.replace("&","%26"), re.S)[0] 

Ama gerçekten html regex olacak ayrıştırmak yoktur: Eğer isteseydi senin senin regex yerine bir yapmak gerekir çalışmak.

+0

Açıklamalarınız için, özellikle de beni BeautifulSoup'tan haberdar ettiğin için teşekkür ederim. İlk kez bu inanılmaz aracı duydum! Kodları BeautifulSoup kullanarak bitirmeye çalışıyorum. Diğer soruya bakmama yardım eder misin lütfen? [bağlantı] (http://stackoverflow.com/questions/36546667/is-there-a-better-approach-to-use-beautifulsoup-in-my-python-web-crawler-codes) @Padraic Cunningham – Wilheim

İlgili konular